import requests
import json

#异步实现
HOST = 'http://127.0.0.1:9999'
# def test():
# #     data = {"key1":"abc","key2":"123"}
# #
# #
# #     resp = requests.get(url=f'{HOST}/haiyan',params=data)
# #     print(resp.text)
# #
# #
# # if __name__ == '__main__':
# #     test()
import  time
import threading

# ------------------order.json-----
def oder_commit(inData):   # 创建订单
    url = f'{HOST}/api/order/create/'
    payload = inData
    resp = requests.post(url,json=payload)  #json 格式   字典用data
    return resp.json()


#查询接口
'''
查询接口注意事项：
    1- 使用什么去查询--id
    2- 频率  interval 
    3- 没有查询，多久认为是超时  timeout 

'''

def get_order(orderID,interval=5,timeout=30):
    '''

    :param oderID:  申请id
    :param interval: 频率  多久去查
    :param timeout:  超时时间
    :return: 查询结果
    '''
    url = f'{HOST}/api/order/get_result9/'   #result9 是错的，把9删了就好了
    payload1 = {'order_id': orderID}
    #1-记录函数开始运行的时间
    startTime = time.time() #秒数  1970 开始算
    #2-查询的结束时间
    endtime =startTime + timeout
    #3-在时间内去查询结果
    cnt  = 1#查询次数
    while time.time()<endtime: #当前时间<结束时间
        resp1 = requests.get(url,params=payload1)  # json 格式   字典用data
        #如果查询到结果就退出查询
        if resp1.text:
            print(f'第{cnt}次查询，已有结果，停止查询',resp1.text)
            break  #停止循坏
        else:
            print(f'第{cnt}次查询，无结果，请等待查询结果')
            time.sleep(interval)
        cnt +=1   #循坏增加次数
    print('-----查询结束-----')

'''
写代码的流程： 功能--性能（效率）优化
问题： 
    1-领导看了你的自动化完成情况，表现出认可，但是是否可以提供执行效率!
分析：
    1-领导看到的是一个现象
    2-慢的原因： time.sleep() IO阻塞
    3-给方案
        1-request.xx()和time.sleep() io阻塞
        2-效率方案：多进程、多线程、多协程---比较优化方案  多进程+多协程
            把cpu每一核都用上 -- 多进程
            把cpu每一核都用好--多协程
        3-为实现方案：
            1-主线程  --- main自动化代码
            2-子线程--- get_order

'''



if __name__ == '__main__':
    startTime = time.time()
    testData ={
                    "user_id":"sq001",
                    "goods_id":"20201012",
					"num":2,
                    "amount":100.8
            }
    res = oder_commit(testData)
    orderID = res['order_id']
    print(orderID)


    #查询接口
    # get_result ={
    #     "order_id": "6666"
    # }
    #
    # res1 = get_order(get_result)
    # print(res1)


    #------------子线程--------------


    """
    子线程对象 = threading.Thread(target,args)
    target:你把哪一个函数当成子线程，直接传递函数名
    args：你传递的函数需要使用的变量 ---元组类型
    """
    t1 = threading.Thread(target=get_order,args=(orderID,))  # target 传子线程的函数  主线程和子线程一起跑

    # threadList = []
    # for one in range(10):
    #     threadList.append(threading.Thread(target=get_order_result,args=(orderID,)))

    #如果主线程结束，或异常退出，子线程就直接强制结束！
    t1.setDaemon(True)
    t1.start()  # 开启子线程




#--------------------------------------------


    #-----自动化执行其他接口代码--------
    for one in range(20):
        time.sleep(1)#自动化发送请求的时间---模拟
        print(f'{one}-我正在执行其他接口的自动化测试')

    endTime = time.time()
    print('整个自动化测试运行耗时>>> ',endTime-startTime)